\section{Benefits of our technique}
 
The query functions of our protocol are generic functions, allowing
client code to define methods for overriding or extending default
behavior.  For this purpose, the query functions all have a
\texttt{client} parameter.  Default methods supplied by \trucler{} do
not specialize to this parameter, but client code should supply a
standard object as the corresponding argument when these functions are
called.  The class of this argument can then be used in primary or
auxiliary methods defined by client code, thereby allowing arbitrary
customization of the library.

Furthermore, each query function returns an instance of a standard
class, rather than multiple values.  Client code can define subclasses
of the classes used by the query functions.  In particular, for
objects in the global environment, client code can return instances of
classes containing arbitrary information that it finds useful for the
language processor.  For example, if a global function turns out to be
a generic function, client code can then return a subclass of the
\trucler{} class \texttt{global-function-description} that contains
information such as the the generic-function class, the method class,
and the method combination, as we suggested in our paper about
\texttt{make-method-lambda} \cite{DBLP:conf/els/DurandS19}.
